package br.com.rhweb.controladores;

/**
 * Esse controlador toma como base o pressuposto que para funcionar existe uma sessão
 * então quando for instancialo vc deverá passar uma sessão 	@{code FacesContextUtil.getRequestSession();}
 * isso torna o usa da fachada um pouco inviavel e cansativo
 */

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;

import br.com.rhweb.dao.Dao;
import br.com.rhweb.dao.IDao;
import br.com.rhweb.modelos.Funcionario;
import br.com.rhweb.modelos.FuncionarioPK;

public class Controlador_Funcionario implements Serializable{

	private IDao<Funcionario> repositorio_funcionario;

	public void cadastrar_funcionario(Funcionario funcionario, Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		repositorio_funcionario.save(funcionario);

	}

	public void remover_funcionario(Funcionario funcionario, Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		repositorio_funcionario.delete(funcionario);
	}

	/**
	 * @author Jesse Da ultima vez que estavaos reunidos foi discultido que a
	 *         matricula do usuario não entraria mais como validador para
	 *         login, pensando disso deixei apenas como busca o campo
	 *         {@code cpf}
	 */

	public Funcionario procurar_funcionario(String cpf, Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		repositorio_funcionario.load(cpf);
		return repositorio_funcionario.load(cpf);
	}

	/**
	 * @author Jesse O metodo abaixo funciona como uma alternativa para o login
	 */

	public Funcionario procurar_funcionario(String matricula, String cpf,
			Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		return repositorio_funcionario.load(matricula, cpf);
	}

	public Funcionario procurar_funcionario(FuncionarioPK f, Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		return repositorio_funcionario.load(f);
	}

	public void atualizar_funcionario(Funcionario funcionario, Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		repositorio_funcionario.update(funcionario);
	}

	/**
	 * @author Jesse Futuramente deverão ser adicionados novos filtros para
	 *         essa busca
	 */

	public List<Funcionario> lista_de_funcionarios(Session s) {
		repositorio_funcionario = new Dao<Funcionario>(s, Funcionario.class);
		return repositorio_funcionario.list();
	}
	

}
